home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / distutils / mwerkscompiler.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  8KB  |  203 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. '''distutils.mwerkscompiler
  5.  
  6. Contains MWerksCompiler, an implementation of the abstract CCompiler class
  7. for MetroWerks CodeWarrior on the Macintosh. Needs work to support CW on
  8. Windows.'''
  9. __revision__ = '$Id: mwerkscompiler.py,v 1.13 2004/11/10 22:23:14 loewis Exp $'
  10. import sys
  11. import os
  12. import string
  13. from types import *
  14. from distutils.errors import DistutilsExecError, DistutilsPlatformError, CompileError, LibError, LinkError
  15. from distutils.ccompiler import CCompiler, gen_preprocess_options, gen_lib_options
  16. import distutils.util as distutils
  17. import distutils.dir_util as distutils
  18. from distutils import log
  19. import mkcwproject
  20.  
  21. class MWerksCompiler(CCompiler):
  22.     '''Concrete class that implements an interface to MetroWerks CodeWarrior,
  23.        as defined by the CCompiler abstract class.'''
  24.     compiler_type = 'mwerks'
  25.     executables = { }
  26.     _c_extensions = [
  27.         '.c']
  28.     _cpp_extensions = [
  29.         '.cc',
  30.         '.cpp',
  31.         '.cxx']
  32.     _rc_extensions = [
  33.         '.r']
  34.     _exp_extension = '.exp'
  35.     src_extensions = _c_extensions + _cpp_extensions + _rc_extensions
  36.     res_extension = '.rsrc'
  37.     obj_extension = '.obj'
  38.     static_lib_extension = '.lib'
  39.     shared_lib_extension = '.slb'
  40.     static_lib_format = shared_lib_format = '%s%s'
  41.     exe_extension = ''
  42.     
  43.     def __init__(self, verbose = 0, dry_run = 0, force = 0):
  44.         CCompiler.__init__(self, verbose, dry_run, force)
  45.  
  46.     
  47.     def compile(self, sources, output_dir = None, macros = None, include_dirs = None, debug = 0, extra_preargs = None, extra_postargs = None, depends = None):
  48.         (output_dir, macros, include_dirs) = self._fix_compile_args(output_dir, macros, include_dirs)
  49.         self._MWerksCompiler__sources = sources
  50.         self._MWerksCompiler__macros = macros
  51.         self._MWerksCompiler__include_dirs = include_dirs
  52.         return []
  53.  
  54.     
  55.     def link(self, target_desc, objects, output_filename, output_dir = None, libraries = None, library_dirs = None, runtime_library_dirs = None, export_symbols = None, debug = 0, extra_preargs = None, extra_postargs = None, build_temp = None, target_lang = None):
  56.         (objects, output_dir) = self._fix_object_args(objects, output_dir)
  57.         (libraries, library_dirs, runtime_library_dirs) = self._fix_lib_args(libraries, library_dirs, runtime_library_dirs)
  58.         if target_desc not in (self.SHARED_LIBRARY, self.SHARED_OBJECT):
  59.             raise DistutilsPlatformError, 'Can only make SHARED_LIBRARY or SHARED_OBJECT targets on the Mac'
  60.         
  61.         if runtime_library_dirs:
  62.             raise DistutilsPlatformError, 'Runtime library dirs not implemented yet'
  63.         
  64.         if extra_preargs or extra_postargs:
  65.             raise DistutilsPlatformError, 'Runtime library dirs not implemented yet'
  66.         
  67.         if len(export_symbols) != 1:
  68.             raise DistutilsPlatformError, 'Need exactly one export symbol'
  69.         
  70.         sources = map(self._filename_to_abs, self._MWerksCompiler__sources)
  71.         include_dirs = map(self._filename_to_abs, self._MWerksCompiler__include_dirs)
  72.         if objects:
  73.             objects = map(self._filename_to_abs, objects)
  74.         else:
  75.             objects = []
  76.         if build_temp:
  77.             build_temp = self._filename_to_abs(build_temp)
  78.         else:
  79.             build_temp = os.curdir()
  80.         if output_dir:
  81.             output_filename = os.path.join(output_dir, output_filename)
  82.         
  83.         output_filename = self._filename_to_abs(output_filename)
  84.         (output_dir, output_filename) = os.path.split(output_filename)
  85.         if output_filename[-8:] == '.ppc.slb':
  86.             basename = output_filename[:-8]
  87.         elif output_filename[-11:] == '.carbon.slb':
  88.             basename = output_filename[:-11]
  89.         else:
  90.             basename = os.path.strip(output_filename)[0]
  91.         projectname = basename + '.mcp'
  92.         targetname = basename
  93.         xmlname = basename + '.xml'
  94.         exportname = basename + '.mcp.exp'
  95.         prefixname = 'mwerks_%s_config.h' % basename
  96.         distutils.dir_util.mkpath(build_temp, dry_run = self.dry_run)
  97.         distutils.dir_util.mkpath(output_dir, dry_run = self.dry_run)
  98.         settings = { }
  99.         settings['mac_exportname'] = exportname
  100.         settings['mac_outputdir'] = output_dir
  101.         settings['mac_dllname'] = output_filename
  102.         settings['mac_targetname'] = targetname
  103.         settings['sysprefix'] = sys.prefix
  104.         settings['mac_sysprefixtype'] = 'Absolute'
  105.         sourcefilenames = []
  106.         sourcefiledirs = []
  107.         for filename in sources + objects:
  108.             (dirname, filename) = os.path.split(filename)
  109.             sourcefilenames.append(filename)
  110.             if dirname not in sourcefiledirs:
  111.                 sourcefiledirs.append(dirname)
  112.                 continue
  113.         
  114.         settings['sources'] = sourcefilenames
  115.         settings['libraries'] = libraries
  116.         settings['extrasearchdirs'] = sourcefiledirs + include_dirs + library_dirs
  117.         if self.dry_run:
  118.             print 'CALLING LINKER IN', os.getcwd()
  119.             for key, value in settings.items():
  120.                 print '%20.20s %s' % (key, value)
  121.             
  122.             return None
  123.         
  124.         exportfilename = os.path.join(build_temp, exportname)
  125.         log.debug('\tCreate export file %s', exportfilename)
  126.         fp = open(exportfilename, 'w')
  127.         fp.write('%s\n' % export_symbols[0])
  128.         fp.close()
  129.         if self._MWerksCompiler__macros:
  130.             prefixfilename = os.path.join(os.getcwd(), os.path.join(build_temp, prefixname))
  131.             fp = open(prefixfilename, 'w')
  132.             fp.write('#include "mwerks_shcarbon_config.h"\n')
  133.             for name, value in self._MWerksCompiler__macros:
  134.                 if value is None:
  135.                     fp.write('#define %s\n' % name)
  136.                     continue
  137.                 fp.write('#define %s %s\n' % (name, value))
  138.             
  139.             fp.close()
  140.             settings['prefixname'] = prefixname
  141.         
  142.         xmlfilename = os.path.join(os.getcwd(), os.path.join(build_temp, xmlname))
  143.         log.debug('\tCreate XML file %s', xmlfilename)
  144.         xmlbuilder = mkcwproject.cwxmlgen.ProjectBuilder(settings)
  145.         xmlbuilder.generate()
  146.         xmldata = settings['tmp_projectxmldata']
  147.         fp = open(xmlfilename, 'w')
  148.         fp.write(xmldata)
  149.         fp.close()
  150.         projectfilename = os.path.join(os.getcwd(), os.path.join(build_temp, projectname))
  151.         log.debug('\tCreate project file %s', projectfilename)
  152.         mkcwproject.makeproject(xmlfilename, projectfilename)
  153.         log.debug('\tBuild project')
  154.         mkcwproject.buildproject(projectfilename)
  155.  
  156.     
  157.     def _filename_to_abs(self, filename):
  158.         filename = distutils.util.convert_path(filename)
  159.         if not os.path.isabs(filename):
  160.             curdir = os.getcwd()
  161.             filename = os.path.join(curdir, filename)
  162.         
  163.         components = string.split(filename, ':')
  164.         for i in range(1, len(components)):
  165.             if components[i] == '..':
  166.                 components[i] = ''
  167.                 continue
  168.         
  169.         return string.join(components, ':')
  170.  
  171.     
  172.     def library_dir_option(self, dir):
  173.         """Return the compiler option to add 'dir' to the list of
  174.         directories searched for libraries.
  175.         """
  176.         pass
  177.  
  178.     
  179.     def runtime_library_dir_option(self, dir):
  180.         """Return the compiler option to add 'dir' to the list of
  181.         directories searched for runtime libraries.
  182.         """
  183.         pass
  184.  
  185.     
  186.     def library_option(self, lib):
  187.         """Return the compiler option to add 'dir' to the list of libraries
  188.         linked into the shared library or executable.
  189.         """
  190.         pass
  191.  
  192.     
  193.     def find_library_file(self, dirs, lib, debug = 0):
  194.         """Search the specified list of directories for a static or shared
  195.         library file 'lib' and return the full path to that file.  If
  196.         'debug' true, look for a debugging version (if that makes sense on
  197.         the current platform).  Return None if 'lib' wasn't found in any of
  198.         the specified directories.
  199.         """
  200.         return 0
  201.  
  202.  
  203.